package com.vincce.fitness.core.util;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.LinkedList;
import java.util.List;

public class ExcelReaderUtil {
	/**
	 * 对外提供读取excel 的方法
	 * */
	public static List<List<Object>> readExcel(String fileName, InputStream inputStream) throws IOException{
		//String fileName = file.getName();
		String extension = fileName.lastIndexOf(".")==-1?"":fileName.substring(fileName.lastIndexOf(".")+1);
		if("xls".equals(extension)){
			return read2003Excel(inputStream);
		}else if("xlsx".equals(extension)){
			return read2007Excel(inputStream);
		}else{
			throw new IOException("不支持的文件类型");
		}
	}
	/**
	 * 读取 office 2003 excel
	 * @throws java.io.IOException
	 * @throws java.io.FileNotFoundException */
	private static List<List<Object>> read2003Excel(InputStream inputStream) throws IOException{
		List<List<Object>> list = new LinkedList<List<Object>>();
		HSSFWorkbook hwb = new HSSFWorkbook(inputStream);
		HSSFSheet sheet = hwb.getSheetAt(0);
		Object value = null;
		HSSFRow row = null;
		HSSFCell cell = null;
		for(int i = sheet.getFirstRowNum();i<= sheet.getPhysicalNumberOfRows();i++){
			row = sheet.getRow(i);
			if (row == null) {
				continue;
			}
			List<Object> linked = new LinkedList<Object>();
			for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
				cell = row.getCell(j);
				if (cell == null) {
					continue;
				}
				DecimalFormat df = new DecimalFormat("0");// 格式化 number String 字符
				switch (cell.getCellType()) {
					case XSSFCell.CELL_TYPE_STRING:
						value = cell.getStringCellValue();
						System.out.println("字符内容："+value);
						break;
					case XSSFCell.CELL_TYPE_NUMERIC:
						value = df.format(cell.getNumericCellValue());
						System.out.println("数字内容："+value);
						break;
					case XSSFCell.CELL_TYPE_BOOLEAN:
						value = cell.getBooleanCellValue();
						break;
					case XSSFCell.CELL_TYPE_BLANK:
						value = "";
						break;
					default:
						value = cell.toString();
				}
				if (value == null || "".equals(value)) {
					continue;
				}
				linked.add(value);
			}
			list.add(linked);
		}
		return list;
	}
	/**
	 * 读取Office 2007 excel
	 * */
	private static List<List<Object>> read2007Excel(InputStream inputStream) throws IOException {
		List<List<Object>> list = new LinkedList<List<Object>>();
		// 构造 XSSFWorkbook 对象，strPath 传入文件路径
		XSSFWorkbook xwb = new XSSFWorkbook(inputStream);//整个excel文件
		// 读取第一章表格内容
		XSSFSheet sheet = xwb.getSheetAt(0);//excel文件中的一个sheet文件
		Object value = null;
		XSSFRow row = null;//一行
		XSSFCell cell = null;//一个单元格
		for (int i = sheet.getFirstRowNum(); i <= sheet
				.getPhysicalNumberOfRows(); i++) {
			row = sheet.getRow(i);
			if (row == null) {
				continue;
			}
			List<Object> linked = new LinkedList<Object>();
			for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
				cell = row.getCell(j);
				if (cell == null) {
					continue;
				}
				DecimalFormat df = new DecimalFormat("0");
				switch (cell.getCellType()) {
					case XSSFCell.CELL_TYPE_STRING:
						value = cell.getStringCellValue();
						System.out.println("字符内容："+value);
						break;
					case XSSFCell.CELL_TYPE_NUMERIC:
						value = df.format(cell.getNumericCellValue());
						System.out.println("数字内容："+value);
						break;
					case XSSFCell.CELL_TYPE_BOOLEAN:
						value = cell.getBooleanCellValue();
						break;
					case XSSFCell.CELL_TYPE_BLANK:
						value = "";
						break;
					default:
						value = cell.toString();
				}
				if (value == null || "".equals(value)) {
					continue;
				}
				linked.add(value);
			}
			list.add(linked);
		}
		return list;
	}

}